package com.ccit.springbootlaw.service.impl;

import com.ccit.springbootlaw.mapper.CaseMapper;
import com.ccit.springbootlaw.pojo.Case;
import com.ccit.springbootlaw.pojo.PageBean;
import com.ccit.springbootlaw.service.CaseService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 案件服务实现类
 * 实现了CaseService接口，提供了案件相关的业务逻辑
 */
@Service
public class CaseServiceImpl implements CaseService {

    @Autowired
    private CaseMapper caseMapper;

    /**
     * 根据ID查找案件
     *
     * @param id 案件ID
     * @return 返回找到的案件对象，如果未找到则返回null
     */
    @Override
    public Case findById(int id) {
        return caseMapper.findById(id);
    }

    /**
     * 根据条件查找案件
     *
     * @param caseInfo  案件信息对象，包含查询条件
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 返回符合条件的案件列表
     */
    @Override
    public PageBean<Case> findByCriteria(Case caseInfo, Date startTime, Date endTime, int page) {
        PageBean<Case> pageBean = new PageBean<>();
        PageHelper.startPage(page / 100, page % 100);
        List<Case> result = caseMapper.findByCriteria(caseInfo, startTime, endTime);
        Page<Case> pageInfo = (Page<Case>) result;
        pageBean.setTotal(pageInfo.getTotal());
        pageBean.setRows(pageInfo.getResult());
        pageBean.setPage(page / 100);
        pageBean.setRowsPerPage(page % 100);
        return pageBean;
    }

    /**
     * 插入新的案件
     *
     * @param caseInfo 案件信息对象
     * @return 返回插入操作影响的行数
     */
    @Override
    public int insertCase(Case caseInfo) {
        return caseMapper.insertCase(caseInfo);
    }

    /**
     * 更新案件信息
     *
     * @param caseInfo 案件信息对象，包含要更新的信息
     * @return 返回更新操作影响的行数
     */
    @Override
    public int updateCase(Case caseInfo) {
        return caseMapper.updateCase(caseInfo);
    }

    /**
     * 根据ID删除案件
     *
     * @param id 案件ID
     * @return 返回删除操作影响的行数
     */
    @Override
    public int deleteCaseById(int id) {
        return caseMapper.deleteCaseById(id);
    }

    /**
     * 查找所有案件
     *
     * @return 返回所有案件的列表
     */
    @Override
    public PageBean<Case> findAllCases(int page) {
        PageBean<Case> pageBean = new PageBean<>();
        PageHelper.startPage(page / 100, page % 100);
        List<Case> result = caseMapper.findAllCases();
        Page<Case> pageInfo = (Page<Case>) result;
        pageBean.setTotal(pageInfo.getTotal());
        pageBean.setRows(pageInfo.getResult());
        pageBean.setPage(page / 100);
        pageBean.setRowsPerPage(page % 100);
        return pageBean;
    }
}